/*
 * File:	BootImage.h
 *
 * Copyright (c) Freescale Semiconductor, Inc. All rights reserved.
 * See included license file for license details.
 */
#if !defined(_BootImage_h_)
#define _BootImage_h_

#include <iostream>
#include "Version.h"

namespace elftosb
{
/*!
 * \brief Abstract base class for all boot image format classes.
 *
 * Provides virtual methods for all of the common features between different
 * boot image formats. These are the product and component version numbers
 * and the drive tag.
 *
 * Also provided is the virtual method writeToStream() that lets the caller
 * stream out the boot image without knowing the underlying format type.
 */
class BootImage
{
public:
    //! \brief Constructor.
    BootImage() {}
    //! \brief Destructor.
    virtual ~BootImage() {}
    //! \name Versions
    //@{
    virtual void setProductVersion(const version_t &version) = 0;
    virtual void setComponentVersion(const version_t &version) = 0;
    //@}

    //! \brief Specify the drive tag to be set in the output file header.
    virtual void setDriveTag(uint16_t tag) = 0;

    //! \brief Returns a string containing the preferred file extension for image format.
    virtual std::string getFileExtension() const = 0;

    //! \brief Write the boot image to an output stream.
    virtual void writeToStream(std::ostream &stream) = 0;
};

}; // namespace elftosb

#endif // _BootImage_h_
